module DPLL(
  input    clk,
	input    rst,
	input    reference_signal,
	
	output   controlled_signal,
  output  [15:0]		count_cnt
);
 
wire lead_signal;
wire lag_signal;	
wire bothEdge;
	
DPD u0_DPD(
  .controlled_signal(controlled_signal),        //受控信号
	.reference_signal(reference_signal),         //参考信号
	.rst(rst),                      //复位信号（反）
	.clk(clk),                      //时钟源
	
	.lead_signal_wire(lead_signal),             //提前信号，表示受控信号提前于参考信号出现边沿
	.lag_signal_wire(lag_signal),              //滞后信号，表示受控信号滞后于参考信号出现边沿
	.bothEdge(bothEdge)                //上升沿触发信号，表示参考信号出现上升沿	
);	

wire lead_signal_2;
wire lag_signal_2;	
	
DB u0_DB(
  .clk(clk),    //时钟
	.rst(rst),    //复位
	.s_in_1(lead_signal), //输入信号——1
	.s_in_2(lag_signal), //输入信号——2
	
	.s_out_1(lead_signal_2), //输出信号——1
	.s_out_2(lag_signal_2)  //输出信号——2
);
	
DCO u0_DCO(
	.clk(clk),                    //时钟源
	.rst(rst),                    //复位信号
	
	.carryPulse(lag_signal_2),             //借位信号，相当于计数器上限-1
	.subtractionPulse(lead_signal_2),       //进位信号，相当于计数器上限+1
	.bothEdge(bothEdge),               //上升沿触发信号
	
	.controlled_signal(controlled_signal)       //受控信号
);
	
endmodule
